之前我們介紹了如何使用 :focus & :focus-visible 來處理表單的焦點效果,這次我們要來看當表單元素被禁用時如何應用樣式 :disabled
,以及如何利用 :enabled
為啟用狀態設置樣式。
disabled
的元素在了解基本用法之前,先看看哪些 HTML 元素可以被 disabled
,進而應用 :disabled
來改變它們的樣式。大部分的表單元素都支持 disabled
屬性:
<fieldset>
:禁用表單元素群組<input>
:禁用輸入框、勾選框、單選框<textarea>
:禁用多行文本區域<select>
:禁用下拉選單<option>
:禁用下拉選單中的選項<button>
:禁用按鈕:disabled
基本用法選擇器:disabled {
屬性名: 屬性值;
}
一起試試:[CODEPEN]
<form>
<h1>個人資訊</h1>
<label for="name">姓名:</label>
<input type="text" id="name" name="name" disabled>
<label>興趣:</label>
<label>
<input type="checkbox" name="hobbies" value="reading" disabled> 閱讀
</label>
<label>
<input type="checkbox" name="hobbies" value="sports" disabled> 運動
</label>
<label>性別:</label>
<label>
<input type="radio" name="gender" value="male" disabled> 男
</label>
<label>
<input type="radio" name="gender" value="female" disabled> 女
</label>
<label for="country">國家:</label>
<select id="country" name="country" disabled>
<option value="taiwan">台灣</option>
<option value="japan">日本</option>
<option value="usa">美國</option>
</select>
<label for="message">自我介紹:</label>
<textarea id="message" name="message" rows="4" cols="50" disabled></textarea>
<button type="submit" disabled>送出</button>
</form>
input:disabled,
textarea:disabled,
select:disabled,
option:disabled,
button:disabled {
background-color: #d1d1d1;
}
如上所見,當表單元素處於 disabled
狀態時,背景顏色會變為灰色,不過上個章節 :checked
有講過,瀏覽器對複選框、單選框有自己內建的預設外觀,所以此顏色只會變成它預設的淺灰色,如要設置其他樣式可像上篇章節 :checked
一樣,自行客製複選框、單選框樣式,或是利用後面會講到的偽元素來客製樣式。
:enabled
基本用法與 :disabled
相對應的是 :enabled
,它針對表單中的啟用元素。
選擇器:enabled {
屬性名: 屬性值;
}
disabled
)一起試試:[CODEPEN]
<form>
<h1>個人資訊</h1>
<label for="name">姓名:</label>
<input type="text" id="name" name="name">
<label for="country">國家:</label>
<select id="country" name="country">
<option value="taiwan">台灣</option>
<option value="japan">日本</option>
<option value="usa">美國</option>
</select>
<label for="message">自我介紹:</label>
<textarea id="message" name="message" rows="4" cols="50"></textarea>
<button type="submit">送出</button>
</form>
input:enabled,
textarea:enabled,
select:enabled {
background-color: cornsilk;
}
button:enabled {
background-color: sienna;
}
這個範例展示了啟用狀態下的表單元素樣式,<input>
、<textarea>
、<select>
都會有淺黃色的背景色,<button>
會是棕色,但是你可能會發現,其實不寫 :enabled
也能達到相同效果
input,
textarea,
select {
background-color: cornsilk;
}
button{
background-color: sienna;
}
兩種方式看起來的效果其實也會是一樣的,但其實還是有些許差異,
比方說,表單元素 <input>
為 disabled
狀態時,會呈現灰色
如果沒使用 :enabled
時,我們可以按 F12
打開開發人員工具,查看 <input>
的樣式,我們會發現,<input>
會以覆蓋的方式蓋掉原本的背景色
而 :enabled
只會用於啟用狀態,所以在 disabled
時不會有啟用狀態的樣式。
一起試試:[CODEPEN]
在實際開發中,我們常常會根據表單的驗證狀態來控制按鈕的啟用與禁用,例如提交按鈕在所有欄位通過驗證後才可使用。
<form>
<h1>個人資訊</h1>
<label for="name">姓名:</label>
<input type="text" id="name" name="name" required>
<label for="message">自我介紹:</label>
<textarea id="message" name="message" rows="4" cols="50" required></textarea>
<button type="submit" id="submit" disabled>送出</button>
</form>
CSS 樣式:表單欄位加上禁用、啟用樣式
form {
background-color: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
width: 100%;
max-width: 500px;
}
label {
display: block;
margin-bottom: 10px;
font-weight: bold;
}
input[type="text"],
textarea {
width: 100%;
padding: 10px;
margin-bottom: 15px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1rem;
}
button {
width: 100%;
padding: 10px;
background-color: black;
border: none;
border-radius: 4px;
color: white;
font-size: 1rem;
cursor: pointer;
transition: background-color 0.3s;
}
button:enabled {
background-color: sienna;
}
input:enabled,
textarea:enabled {
background-color: cornsilk;
}
input:disabled,
textarea:disabled,
button:disabled{
background-color: #d1d1d1;
}
JavaScript 驗證:姓名、介紹為必填欄位,兩個欄位填寫後才會啟用按鈕
const nameInput = document.getElementById("name");
const messageInput = document.getElementById("message");
const submitButton = document.getElementById("submit");
function checkFormValidity() {
if (nameInput.value.trim() !== "" && messageInput.value.trim() !== "") {
submitButton.disabled = false;
} else {
submitButton.disabled = true;
}
}
nameInput.addEventListener("input", checkFormValidity);
messageInput.addEventListener("input", checkFormValidity);
沒有填寫欄位時,提交按鈕為 disabled
狀態
填寫後驗證通過,啟用提交按鈕
如此一來,就完成驗證表單囉!
:disabled
和 :enabled
是專門針對表單元素的禁用和啟用狀態進行樣式控制。透過這兩個選擇器,我們可以靈活地為表單元素設置不同的視覺效果,提升使用者的操作體驗。
本文將同步更新至 Lala Code
之前不知道有 :enabled
可以用,感覺有很多東西可以調整了 🙌
:enabled
比較不常用到~下次可以用用看🙂👍